package librairies.dictionnaire;

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;

import librairies.dictionnaire.dico.DicoArbre;
import librairies.liste.interfaces.IListe;
import librairies.liste.list.ListeDC;
import modele.Mot;

import org.junit.Test;

public class DicoArbreTest
{
	@Test
	public void testexecut() throws FileNotFoundException, IOException //FIXME nok
	{
		DicoArbre<Mot> d = new DicoArbre<Mot>();
		
		System.out.println(d+"("+d.size()+" mots)");
		
		IListe<Mot> liste = new ListeDC<Mot>();
	    BufferedReader handler = new BufferedReader(new FileReader("configuration/test/dico/" + "Dico_essais.txt"));
	    String ligne;
	    while ((ligne = handler.readLine())!=null) liste.add(new Mot(ligne, "test"));

		d = new DicoArbre<Mot>(liste);
		System.out.println(d+"("+d.size()+" mots)");
		System.out.println(d.getArbre());
		liste = new ListeDC<Mot>();
		liste.add(new Mot("visée","test")).add(new Mot("vue","test")).add(new Mot("xylophone","test"));
		liste.add(new Mot("trivial","test")).add(new Mot("tueur","test"));
		System.out.println(d.addWords(liste)+"("+d.size()+" mots)");
		liste = new ListeDC<Mot>();
		liste.add(new Mot("vue","test")).add(new Mot("vue","test")).add(new Mot("yyy","test"));
		System.out.println(d.cutWords(liste)+"("+d.size()+" mots)");
		System.out.println("\"vue\" présent ? "+d.exists(new Mot("vue", "test")));
		System.out.println("\"à\" présent ? "+d.exists(new Mot("à", "test")));
		System.out.println("Mots commentçant par \"t\" : "+d.commonPrefix(new Mot("t", "test")));
		System.out.println("Mots commentçant par \"tr\" : "+d.commonPrefix(new Mot("tr", "test")));
		System.out.println("Mots commentçant par \"tra\" : "+d.commonPrefix(new Mot("tra", "test")));
		System.out.println("Mots commentçant par \"travers\" : "+d.commonPrefix(new Mot("travers", "test")));
		System.out.println("Mots commentçant par \"traverse\" : "+d.commonPrefix(new Mot("traverse", "test")));
		System.out.println("Mots commentçant par \"traversent\" : "+d.commonPrefix(new Mot("traversent", "test")));
		System.out.println("#########################");
		long topDepart = java.lang.management.ManagementFactory.getThreadMXBean().getCurrentThreadCpuTime();

		liste = new ListeDC<Mot>();
	    handler = new BufferedReader(new FileReader("configuration/test/dico/" + "Dico_enorme.txt"));
	    while ((ligne = handler.readLine())!=null) liste.add(new Mot(ligne, "test"));
		
		d = new DicoArbre<Mot>(liste);
		System.out.println(d.size()+" mots");
		long topArrivee = java.lang.management.ManagementFactory.getThreadMXBean().getCurrentThreadCpuTime();
		System.out.println("Temps d'exécution : "+((topArrivee-topDepart)/1000000.0)+" ms");
		topDepart = java.lang.management.ManagementFactory.getThreadMXBean().getCurrentThreadCpuTime();
		System.out.println("\"vue\" présent ? "+d.exists(new Mot("vue", "test")));
		System.out.println("\"XWXWX\" présent ? "+d.exists(new Mot("XWXWX", "test")));
		topArrivee = java.lang.management.ManagementFactory.getThreadMXBean().getCurrentThreadCpuTime();
		System.out.println("Temps d'exécution : "+((topArrivee-topDepart)/1000000.0)+" ms");
		topDepart = java.lang.management.ManagementFactory.getThreadMXBean().getCurrentThreadCpuTime();
		IListe<Mot> ltrav = d.commonPrefix(new Mot("trav", "test"));
		System.out.println(ltrav.size()+" mots commençant par \"trav\" "+ltrav);
		topArrivee = java.lang.management.ManagementFactory.getThreadMXBean().getCurrentThreadCpuTime();
		System.out.println("Temps d'exécution : "+((topArrivee-topDepart)/1000000.0)+" ms");
		/*
			(0 mots)
			abandonner
			agiter
			ah
			aide
			combat
			combien
			depuis
			dernier
			engager
			enlever
			flot
			marier
			mouvement
			oncle
			prochain
			travers
			traverser
			vue
			y
			yeux
			à
			(21 mots)
			#                                        
			+-------+---+---+---+-+---+-+-+---+-+---+
			a       c   d   e   f m   o p t   v y   à
			+-+-+-+ |   |   |   | +-+ | | |   | +-+ |
			b g h i o   e   n   l a o n r r   u . e .
			| | | | |   +-+ +-+ | | | | | |   |   |  
			a i . d m   p r g l o r u c o a   e   u  
			| |   | |   | | | | | | | | | |   |   |  
			n t   e b   u n a e t i v l c v   .   x  
			| |   | +-+ | | | | | | | | | |       |  
			d e   . a i i i g v . e e e h e       .  
			| |     | | | | | |   | | | | |          
			o r     t e s e e e   r m . a r          
			| |     | | | | | |   | |   | |          
			n .     . n . r r r   . e   i s          
			|         |   | | |     |   | +-+        
			n         .   . . .     n   n . e        
			|                       |   |   |        
			e                       t   .   r        
			|                       |       |        
			r                       .       .        
			|                                        
			.                                        
			
			abandonner
			agiter
			ah
			aide
			combat
			combien
			depuis
			dernier
			engager
			enlever
			flot
			marier
			mouvement
			oncle
			prochain
			travers
			traverser
			trivial
			tueur
			visée
			vue
			xylophone
			y
			yeux
			à
			(25 mots)
			abandonner
			agiter
			ah
			aide
			combat
			combien
			depuis
			dernier
			engager
			enlever
			flot
			marier
			mouvement
			oncle
			prochain
			travers
			traverser
			trivial
			tueur
			visée
			xylophone
			y
			yeux
			à
			(24 mots)
			"vue" présent ? false
			"à" présent ? true
			Mots commentçant par "t" : ( travers traverser trivial tueur )
			Mots commentçant par "tr" : ( travers traverser trivial )
			Mots commentçant par "tra" : ( travers traverser )
			Mots commentçant par "travers" : ( travers traverser )
			Mots commentçant par "traverse" : ( traverser )
			Mots commentçant par "traversent" : ( )
			#########################
			260683 mots
			Temps d'exécution : 764.4049 ms
			"vue" présent ? true
			"XWXWX" présent ? false
			Temps d'exécution : 0.0 ms
			145 mots commençant par "trav" ( travail travailla travaillai travaillaient travaillais travaillait travaillant travaillas travaillasse travaillassent travaillasses travaillassiez travaillassions travaille travaillent travailler travaillera travaillerai travailleraient travaillerais travaillerait travailleras travaillerez travailleriez travaillerions travaillerons travailleront travailles travailleur travailleurs travailleuse travailleuses travaillez travailliez travaillions travaillisme travailliste travaillistes travaillons travailloter travaillâmes travaillât travaillâtes travaillèrent travaillé travaillée travaillées travaillés travaux travelage travelages traveller's travelling travellings travelo travers traversa traversable traversables traversai traversaient traversais traversait traversant traversas traversasse traversassent traversasses traversassiez traversassions traverse traversent traverser traversera traverserai traverseraient traverserais traverserait traverseras traverserez traverseriez traverserions traverserons traverseront traverses traversez traversier traversiers traversiez traversin traversine traversines traversins traversions traversière traversières traversons traversâmes traversât traversâtes traversèrent traversé traversée traversées traversés travertin travesti travestie travesties travestir travestira travestirai travestiraient travestirais travestirait travestiras travestirent travestirez travestiriez travestirions travestirons travestiront travestis travestisme travestismes travestissaient travestissais travestissait travestissant travestisse travestissement travestissements travestissent travestisses travestissez travestissiez travestissions travestissons travestit travestîmes travestît travestîtes traviole travée travées )
			Temps d'exécution : 0.0 ms		 */
	}
}
